Various forms of network-based storage systems are known today. These forms include network attached storage (NAS), storage area networks (SANs), and others. Network storage systems are commonly used for a variety of purposes, such as providing multiple users with access to shared data, backing up critical data (e.g., by data mirroring), etc.
A network-based storage system typically includes at least one storage server, which is a processing system configured to store and retrieve data on behalf of one or more client processing systems (“clients”). In the context of NAS, a storage server may be a file server, which is sometimes called a “filer”. A filer operates on behalf of one or more clients to store and manage shared files. The files may be stored in a storage subsystem that includes one or more arrays of mass storage devices, such as magnetic or optical disks or tapes, by using RAID (Redundant Array of Inexpensive Disks). Hence, the mass storage devices in each array may be organized into one or more separate RAID groups.
In a SAN context, a storage server provides clients with block-level access to stored data, rather than file-level access. Some storage servers are capable of providing clients with both file-level access and block-level access, such as certain Filers made by Network Appliance, Inc. (NetApp®) of Sunnyvale, Calif.
In conventional file servers, data is stored in logical containers called volumes and aggregates. An “aggregate” is a logical container for a pool of storage, combining one or more physical mass storage devices (e.g., disks) or parts thereof into a single logical storage object, which contains or provides storage for one or more other logical data sets at a higher level of abstraction (e.g., volumes). A “volume” is a set of stored data associated with a collection of mass storage devices, such as disks, which obtains its storage from (i.e., is contained within) an aggregate, and which is managed as an independent administrative unit, such as a complete file system. A “file system” is an independently managed, self-contained, hierarchal set of data units (e.g., files, blocks or LUNs). Although a volume or file system (as those terms are used herein) may store data in the form of files, that is not necessarily the case. That is, a volume or file system may store data in the form of other units, such as blocks or LUNs.
In older file servers, there was a fixed, one-to-one relationship between a volume and its containing aggregate, i.e., each volume was exactly coextensive with one aggregate. Consequently, there was a fixed relationship between each volume and the disks that are associated with it. This fixed relationship meant that each volume had exclusive control over the disks that are associated with the volume. Only the volume associated with the disk could read and/or write to the disk. Unused space within the disks associated with the volume could not be used by another volume. Thus, even if a volume was only using a fraction of the space on its associated disks, the unused space was reserved for the exclusive use of the volume.
To overcome these limitations and other limitations of traditional volumes, a technology called flexible volumes was developed by NetApp® and is available in NetApp® Filers as a feature of the Data ONTAP® storage operating system. A flexible volume is analogous to a traditional volume, in that it is managed as a file system; but unlike a traditional volume, a flexible volume is treated separately from the underlying physical storage that contains the associated data. A “flexible volume” is, therefore, a set of stored data associated with one or more mass storage devices, such as disks, which obtains its storage from an aggregate, and which is managed as an independent administrative unit, such as a single file system, but which is flexibly associated with the underlying physical storage.
Flexible volumes allow the boundaries between aggregates and volumes to be flexible, such that there does not have to be a one-to-one relationship between a flexible volume and an aggregate. An aggregate can contain multiple flexible volumes. Hence, flexible volumes can be very flexibly associated with the underlying physical storage block characteristics. Further, to help reduce the amount of wasted storage space, any free data block in an aggregate can be used by any flexible volume in the aggregate. A flexible volume can be grown or shrunk in size. Furthermore, blocks can be committed to flexible volumes on-the-fly from available storage.
One feature which is useful to have in a storage server is the ability to create a read-only, persistent, point-in-time image (RPPI) of a data set, such as a volume or a LUN, including its metadata. This capability allows the exact state of the data set to be restored from the RPPI in the event of, for example, a catastrophic failure of the storage system or data corruption. The ability to restore data from an RPPI provides administrators with a simple mechanism to revert the state of their data to a known previous point in time as captured by the RPPI. Typically, creation of an RPPI or restoration from an RPPI can be controlled from a client-side software tool. An example of an implementation of an RPPI is a Snapshot™ generated by SnapDrive™ or SnapManager® for Microsoft® Exchange software, both made by NetApp®. Unlike other RPPI implementations, NetApp Snapshots do not require duplication of data blocks in the active file system, because the active file system can include pointers to data blocks in a Snapshot, for any blocks that have not been modified since the Snapshot was created.
One problem with the known prior art is that there is no way to create an RPPI of multiple volumes in a single atomic operation. Consequently, if an administrator wanted to acquire an RPPI of all volumes stored by a storage server (or at east more than one volume) at a given point in time, he would have to initiate or program a separate RPPI operation for each volume. That is because each of the volumes is designed as an independent, separately managed set of data. Having to initiate or program a separate RPPI operation for each volume can be time-consuming and burdensome, since there can be many volumes maintained by a given storage server.